package validate.sudoku;

import java.util.HashMap;
import java.util.Map;

/**
 * @Time 2019/12/30
 * @author 王光浩
 * @Need 给定一个9*9的数独数据，判断填充的数独数据是否有效。
 * @Thinking 使用HashMap解决该问题。对数组中所有元素遍历一遍，然后得出结果。
 *           思路：使用9+9+9个HashMap来完成该题，每一个行一个HashMap，每一个列一个HashMap，每一个3*3宫格一个HashMap，
 *                 然后对字符数组进行遍历，将对应的元素加入对应的HashMap中，如果出现相同的则返回false。
 */
public class OthersMethod {
    public boolean isValidSudoku(char[][] board) {
    	Map<Character,Integer>[] row=new HashMap[9];      
    	Map<Character,Integer>[] column=new HashMap[9];
    	Map<Character,Integer>[] block=new HashMap[9];   //每一个3*3宫格
    	char tem;
    	//初始化数据
    	for(int i=0;i<9;i++) {
    		row[i]=new HashMap<Character,Integer>();
    		column[i]=new HashMap<Character,Integer>();
    		block[i]=new HashMap<Character,Integer>();
    	}
    	//遍历数组，将数组中的每一个元素加入到对应的HashMap中
    	for(int i=0;i<9;i++) {
    		for(int j=0;j<9;j++) {
    			tem=board[i][j];
    			if(tem!='.') {
    				//判断数字在对应的行、列和3*3宫格是否存在
    				if(row[i].put(tem, 1)!=null || column[j].put(tem, 1)!=null || block[(i/3)*3+j/3].put(tem, 1)!=null)
    					return false;
    			}
    		}
    	}
    	return true;
    }

}
